package com.femass.repository.infra;

import com.femass.model.Evento;
import com.femass.model.Participante;
import com.femass.repository.EventoRepository;
import com.femass.util.FacesUtil;
import java.util.List;
import javax.faces.application.FacesMessage;
import org.hibernate.HibernateException;
import org.hibernate.Session;

public class EventoRepositoryHibernate implements EventoRepository {

    @Override
    public List<Evento> todos() {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return session.createCriteria(Evento.class)
                .list();
    }

    @Override
    public Evento porCodigo(Integer codigo) {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return (Evento) session.get(Evento.class, new Integer(codigo));
    }

    @Override
    public void salvar(Evento evento) {
        Session session = (Session) FacesUtil.getRequestAttribute("session");

        try {
            session.save(evento);
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Evento salvo com sucesso!");
        } catch (Exception e) {
            e.printStackTrace();
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_FATAL, "Evento não foi salvo!");
        }
    }

    @Override
    public void remover(Evento evento) {
        Session session = (Session) FacesUtil.getRequestAttribute("session");

        try {
            session.delete(evento);
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Evento excluído com sucesso!");
        } catch (HibernateException e) {
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Evento não excluído!");
        }
    }

    @Override
    public List<Evento> ativos() {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return session.createQuery("select e from Evento e where e.data > CURRENT_DATE")                
                .list();
    }
}
